VisaptveroÅ”s ceļvedis par Scikit-learn pazÄ«mju atlases metodÄm dimensiju samazinÄÅ”anai, kas sniedz iespÄju globÄliem datu zinÄtnes praktiÄ·iem veidot efektÄ«vÄkus un robustÄkus modeļus.
Scikit-learn pazÄ«mju atlase: dimensiju samazinÄÅ”anas apgūŔana globÄlÄm datu kopÄm
MÅ«sdienu arvien pieaugoÅ”ajÄ datu visumÄ, milzÄ«gais pazÄ«mju apjoms var pÄrslogot pat vissarežģītÄkos maŔīnmÄcīŔanÄs modeļus. Å Ä« parÄdÄ«ba, ko bieži dÄvÄ par "dimensiju lÄstu", var palielinÄt skaitļoÅ”anas izmaksas, samazinÄt modeļa precizitÄti un mazinÄt interpretÄjamÄ«bas spÄju. Par laimi, pazÄ«mju atlases un dimensiju samazinÄÅ”anas metodes piedÄvÄ spÄcÄ«gus risinÄjumus. Scikit-learn, kas ir Python maŔīnmÄcīŔanÄs ekosistÄmas stÅ«rakmens, nodroÅ”ina bagÄtÄ«gu rÄ«ku komplektu, lai efektÄ«vi risinÄtu Ŕīs problÄmas, padarot to par neaizstÄjamu resursu datu zinÄtniekiem visÄ pasaulÄ.
Å is visaptveroÅ”ais ceļvedis iedziļinÄsies Scikit-learn pazÄ«mju atlases iespÄju niansÄs, koncentrÄjoties uz dimensiju samazinÄÅ”anu. MÄs izpÄtÄ«sim dažÄdas metodoloÄ£ijas, to pamatprincipus, praktisko ievieÅ”anu ar kodu piemÄriem un apsvÄrumus attiecÄ«bÄ uz dažÄdÄm globÄlÄm datu kopÄm. MÅ«su mÄrÄ·is ir sniegt jums, mÅ«su globÄlajai auditorijai, kas sastÄv no topoÅ”iem un pieredzÄjuÅ”iem datu praktiÄ·iem, zinÄÅ”anas, lai pieÅemtu pamatotus lÄmumus par pazÄ«mju atlasi, kas noved pie efektÄ«vÄkiem, precÄ«zÄkiem un interpretÄjamÄkiem maŔīnmÄcīŔanÄs modeļiem.
Izpratne par dimensiju samazinÄÅ”anu
Pirms iedziļinÄmies Scikit-learn specifiskajos rÄ«kos, ir bÅ«tiski izprast dimensiju samazinÄÅ”anas pamatjÄdzienus. Å is process ietver datu pÄrveidoÅ”anu no augstas dimensijas telpas uz zemÄkas dimensijas telpu, vienlaikus saglabÄjot pÄc iespÄjas vairÄk svarÄ«gas informÄcijas. Ieguvumi ir daudzveidÄ«gi:
- SamazinÄta pÄrapmÄcÄ«ba (Overfitting): MazÄks pazÄ«mju skaits nozÄ«mÄ vienkÄrÅ”Äku modeli, kas ir mazÄk pakļauts trokÅ”Åa apguvei apmÄcÄ«bas datos.
- ÄtrÄks apmÄcÄ«bas laiks: Modeļi ar mazÄk pazÄ«mÄm tiek apmÄcÄ«ti ievÄrojami ÄtrÄk.
- Uzlabota modeļa interpretÄjamÄ«ba: Ir vieglÄk izprast attiecÄ«bas starp mazÄku pazÄ«mju skaitu.
- SamazinÄta krÄtuves vieta: MazÄka dimensija prasa mazÄk atmiÅas.
- TrokÅ”Åa samazinÄÅ”ana: Nerelevantas vai liekas pazÄ«mes var tikt novÄrstas, rezultÄtÄ iegÅ«stot tÄ«rÄkus datus.
Dimensiju samazinÄÅ”anu var plaÅ”i iedalÄ«t divÄs galvenajÄs pieejÄs:
1. Pazīmju atlase
Å Ä« pieeja ietver sÄkotnÄjo pazÄ«mju apakÅ”kopas izvÄli, kas ir visatbilstoÅ”ÄkÄ konkrÄtajai problÄmai. SÄkotnÄjÄs pazÄ«mes tiek saglabÄtas, bet to skaits tiek samazinÄts. IztÄlojieties to kÄ visefektÄ«vÄko sastÄvdaļu identificÄÅ”anu receptei un pÄrÄjo atmeÅ”anu.
2. Pazīmju izvilkŔana
Å Ä« pieeja pÄrveido sÄkotnÄjÄs pazÄ«mes jaunÄ, mazÄkÄ pazÄ«mju kopÄ. Å Ä«s jaunÄs pazÄ«mes ir sÄkotnÄjo pazÄ«mju kombinÄcijas vai projekcijas, kuru mÄrÄ·is ir uztvert nozÄ«mÄ«gÄko dispersiju vai informÄciju datos. Tas ir lÄ«dzÄ«gi kÄ radÄ«t destilÄtu sÄkotnÄjo sastÄvdaļu esenci.
Scikit-learn piedÄvÄ spÄcÄ«gus rÄ«kus abÄm Ŕīm pieejÄm. MÄs koncentrÄsimies uz metodÄm, kas veicina dimensiju samazinÄÅ”anu, bieži vien izmantojot pazÄ«mju atlasi vai izvilkÅ”anu.
Pazīmju atlases metodes Scikit-learn
Scikit-learn nodroÅ”ina vairÄkus veidus, kÄ veikt pazÄ«mju atlasi. Tos var plaÅ”i iedalÄ«t trÄ«s kategorijÄs:
1. Filtru metodes
Filtru metodes novÄrtÄ pazÄ«mju atbilstÄ«bu, pamatojoties uz to raksturÄ«gajÄm Ä«paŔībÄm, neatkarÄ«gi no jebkura konkrÄta maŔīnmÄcīŔanÄs modeļa. TÄs parasti ir Ätras un skaitļoÅ”anas ziÅÄ lÄtas, padarot tÄs ideÄlas sÄkotnÄjai datu izpÄtei vai strÄdÄjot ar ļoti lielÄm datu kopÄm. Bieži lietotie rÄdÄ«tÄji ir korelÄcija, savstarpÄjÄ informÄcija un statistiskie testi.
a) Uz korelÄciju balstÄ«ta pazÄ«mju atlase
PazÄ«mes, kas ir stipri korelÄtas ar mÄrÄ·a mainÄ«go, tiek uzskatÄ«tas par svarÄ«gÄm. SavukÄrt pazÄ«mes, kas ir stipri korelÄtas viena ar otru (multikolinearitÄte), var bÅ«t liekas un var tikt apsvÄrtas noÅemÅ”anai. Scikit-learn feature_selection modulis piedÄvÄ rÄ«kus, kas palÄ«dz Å”ajÄ procesÄ.
PiemÄrs: Dispersijas slieksnis (Variance Threshold)
PazÄ«mÄm ar ļoti zemu dispersiju, iespÄjams, nav lielas atŔķirÅ”anas spÄjas. Klase VarianceThreshold noÅem pazÄ«mes, kuru dispersija nesasniedz noteiktu slieksni. Tas ir Ä«paÅ”i noderÄ«gi skaitliskÄm pazÄ«mÄm.
from sklearn.feature_selection import VarianceThreshold
import numpy as np
X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.0)
selector.fit_transform(X)
# Output: array([[2, 0, 3], [1, 4, 3], [1, 1, 3]])
Å ajÄ piemÄrÄ pirmajai pazÄ«mei (visas ir nulles) ir nulles dispersija, un tÄ tiek noÅemta. Tas ir vienkÄrÅ”s, bet efektÄ«vs veids, kÄ atmest konstantas vai gandrÄ«z konstantas pazÄ«mes, kurÄm nav prognozÄÅ”anas spÄjas.
PiemÄrs: KorelÄcija ar mÄrÄ·a mainÄ«go (izmantojot Pandas un SciPy)
Lai gan Scikit-learn nav tieÅ”as augsta lÄ«meÅa funkcijas korelÄcijai ar mÄrÄ·i visiem pazÄ«mju veidiem, tas ir izplatÄ«ts priekÅ”apstrÄdes solis. Å im nolÅ«kam mÄs varam izmantot Pandas un SciPy.
import pandas as pd
import numpy as np
from scipy.stats import pearsonr
# Sample data
data = {
'feature1': np.random.rand(100),
'feature2': np.random.rand(100) * 2,
'feature3': np.random.rand(100) - 1,
'target': np.random.randint(0, 2, 100)
}
df = pd.DataFrame(data)
# Calculate Pearson correlation with the target
correlations = df.corr()['target'].drop('target')
# Select features with correlation above a certain threshold (e.g., 0.2)
selected_features = correlations[abs(correlations) > 0.2].index.tolist()
print(f"Features correlated with target: {selected_features}")
Å is koda fragments demonstrÄ, kÄ identificÄt pazÄ«mes, kurÄm ir lineÄra saistÄ«ba ar mÄrÄ·a mainÄ«go. BinÄriem mÄrÄ·iem ir svarÄ«ga punktu-biseriÄlÄ korelÄcija, bet kategoriskiem mÄrÄ·iem piemÄrotÄki ir citi statistiskie testi.
b) Statistiskie testi
Filtru metodes var arÄ« izmantot statistiskos testus, lai mÄrÄ«tu atkarÄ«bu starp pazÄ«mÄm un mÄrÄ·a mainÄ«go. Tie ir Ä«paÅ”i noderÄ«gi, strÄdÄjot ar kategoriskÄm pazÄ«mÄm vai gadÄ«jumos, kad var izdarÄ«t konkrÄtus pieÅÄmumus par datu sadalÄ«jumu.
Scikit-learn feature_selection modulis piedÄvÄ:
f_classif: ANOVA F-vÄrtÄ«ba starp marÄ·Äjumu/pazÄ«mi klasifikÄcijas uzdevumiem. PieÅem, ka pazÄ«mes ir skaitliskas un mÄrÄ·is ir kategorisks.f_regression: F-vÄrtÄ«ba starp marÄ·Äjumu/pazÄ«mi regresijas uzdevumiem. PieÅem, ka pazÄ«mes ir skaitliskas un mÄrÄ·is ir skaitlisks.mutual_info_classif: SavstarpÄjÄ informÄcija diskrÄtam mÄrÄ·a mainÄ«gajam. SpÄj apstrÄdÄt nelineÄras attiecÄ«bas.mutual_info_regression: SavstarpÄjÄ informÄcija nepÄrtrauktam mÄrÄ·a mainÄ«gajam.chi2: HÄ«-kvadrÄta statistika nenegatÄ«vÄm pazÄ«mÄm klasifikÄcijas uzdevumiem. Izmanto kategoriskÄm pazÄ«mÄm.
PiemÄrs: Izmantojot `f_classif` un `SelectKBest`
SelectKBest ir meta-transformators, kas ļauj atlasÄ«t pazÄ«mes, pamatojoties uz izvÄlÄtu vÄrtÄÅ”anas funkciju (piemÄram, f_classif).
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif
iris = load_iris()
X, y = iris.data, iris.target
# Select the top 2 features using f_classif
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
print(f"Selected feature names: {[iris.feature_names[i] for i in selected_indices]}")
Å is piemÄrs parÄda, kÄ izvÄlÄties 'k' labÄkÄs pazÄ«mes, pamatojoties uz to statistisko nozÄ«mÄ«gumu klasifikÄcijai. F-vÄrtÄ«ba f_classif bÅ«tÄ«bÄ mÄra dispersiju starp grupÄm (klasÄm) attiecÄ«bÄ pret dispersiju grupÄs. AugstÄka F-vÄrtÄ«ba norÄda uz spÄcÄ«gÄku saistÄ«bu starp pazÄ«mi un mÄrÄ·i.
GlobÄls apsvÄrums: StrÄdÄjot ar datu kopÄm no dažÄdiem reÄ£ioniem (piemÄram, sensoru dati no dažÄdiem klimatiem, finanÅ”u dati no dažÄdÄm ekonomiskajÄm sistÄmÄm), pazÄ«mju statistiskÄs Ä«paŔības var ievÄrojami atŔķirties. Ir bÅ«tiski izprast Å”o statistisko testu pieÅÄmumus (piemÄram, normalitÄti ANOVA testam), un neparametriskie testi, piemÄram, savstarpÄjÄ informÄcija, dažÄdÄs situÄcijÄs var bÅ«t robustÄki.
2. "AptveroÅ”Äs" metodes (Wrapper Methods)
"AptveroÅ”Äs" metodes izmanto konkrÄtu maŔīnmÄcīŔanÄs modeli, lai novÄrtÄtu pazÄ«mju apakÅ”kopu kvalitÄti. TÄs "aptver" modeļa apmÄcÄ«bas procesu meklÄÅ”anas stratÄÄ£ijÄ, lai atrastu optimÄlo pazÄ«mju kopu. Lai gan tÄs parasti ir precÄ«zÄkas nekÄ filtru metodes, tÄs ir daudz dÄrgÄkas skaitļoÅ”anas ziÅÄ, jo tiek atkÄrtoti apmÄcÄ«ti modeļi.
a) RekursÄ«vÄ pazÄ«mju eliminÄcija (RFE)
RFE darbojas, rekursÄ«vi noÅemot pazÄ«mes. TÄ sÄk ar modeļa apmÄcÄ«bu visam pazÄ«mju komplektam, pÄc tam noÅem vismazÄk svarÄ«go pazÄ«mi(-es), pamatojoties uz modeļa koeficientiem vai pazÄ«mju svarÄ«gumu. Å is process tiek atkÄrtots, lÄ«dz tiek sasniegts vÄlamais pazÄ«mju skaits.
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# Generate synthetic data
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
# Use a Logistic Regression model (can be any model that supports coef_ or feature_importances_)
estimator = LogisticRegression(solver='liblinear')
# Initialize RFE to select top 5 features
selector = RFE(estimator, n_features_to_select=5, step=1)
selector = selector.fit(X, y)
X_new = selector.transform(X)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
RFE ir spÄcÄ«ga, jo tÄ Åem vÄrÄ pazÄ«mju mijiedarbÄ«bu, ko novÄrtÄ izvÄlÄtais modelis. Parametrs `step` kontrolÄ, cik pazÄ«mju tiek noÅemts katrÄ iterÄcijÄ.
b) SekvenciÄlÄ pazÄ«mju atlase (SFS)
Lai gan tÄ nav tieÅ”a klase Scikit-learn pamatmodulÄ« feature_selection, sekvenciÄlÄ pazÄ«mju atlase ir konceptuÄla pieeja, ko bieži Ä«steno, izmantojot Scikit-learn novÄrtÄtÄjus. TÄ ietver vai nu secÄ«gu pievienoÅ”anu (Forward Selection), sÄkot ar tukÅ”u kopu un pievienojot pazÄ«mes pa vienai, vai secÄ«gu atmeÅ”anu (Backward Elimination), sÄkot ar visÄm pazÄ«mÄm un noÅemot tÄs pa vienai. Scikit-learn SequentialFeatureSelector modulÄ« sklearn.feature_selection to Ä«steno.
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
estimator = LogisticRegression(solver='liblinear')
# Forward selection: add features until desired number is reached
sfs_forward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='forward', cv=5)
sfs_forward.fit(X, y)
X_new_forward = sfs_forward.transform(X)
print(f"Forward Selection - Reduced shape: {X_new_forward.shape}")
# Backward selection: start with all features and remove
sfs_backward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='backward', cv=5)
sfs_backward.fit(X, y)
X_new_backward = sfs_backward.transform(X)
print(f"Backward Selection - Reduced shape: {X_new_backward.shape}")
Parametrs cv klasÄ SequentialFeatureSelector norÄda uz krustenisko validÄciju (cross-validation), kas palÄ«dz padarÄ«t pazÄ«mju atlasi robustÄku un mazÄk pakļautu pÄrapmÄcÄ«bai uz apmÄcÄ«bas datiem. Tas ir kritisks apsvÄrums, pielietojot Ŕīs metodes globÄli, jo datu kvalitÄte un sadalÄ«jums var ievÄrojami atŔķirties.
3. IegultÄs metodes
IegultÄs metodes veic pazÄ«mju atlasi kÄ daļu no modeļa apmÄcÄ«bas procesa. To priekÅ”rocÄ«ba ir tÄ, ka tÄs ir skaitļoÅ”anas ziÅÄ lÄtÄkas nekÄ "aptveroÅ”Äs" metodes, vienlaikus Åemot vÄrÄ pazÄ«mju mijiedarbÄ«bu. Daudzi regularizÄti modeļi ietilpst Å”ajÄ kategorijÄ.
a) L1 regularizÄcija (Lasso)
Modeļi kÄ Lasso (Least Absolute Shrinkage and Selection Operator) lineÄrajos modeļos izmanto L1 regularizÄciju. Å Ä« tehnika pievieno sodu koeficientu absolÅ«tajai vÄrtÄ«bai, kas var novest dažus koeficientus lÄ«dz precÄ«zai nullei. PazÄ«mes ar nulles koeficientiem tiek efektÄ«vi noÅemtas.
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, n_informative=10, random_state=42, noise=10)
# Lasso with alpha (regularization strength)
# A higher alpha leads to more regularization and potentially more zero coefficients
lasso = Lasso(alpha=0.1, random_state=42)
lasso.fit(X, y)
# Get the number of non-zero coefficients (selected features)
non_zero_features = np.sum(lasso.coef_ != 0)
print(f"Number of features selected by Lasso: {non_zero_features}")
# To get the actual selected features:
selected_features_mask = lasso.coef_ != 0
X_new = X[:, selected_features_mask]
print(f"Reduced shape: {X_new.shape}")
LassoCV var izmantot, lai automÄtiski atrastu optimÄlo alfa vÄrtÄ«bu, izmantojot krustenisko validÄciju.
b) Uz kokiem balstīts pazīmju svarīgums
Ansambļa metodes, piemÄram, RandomForestClassifier, GradientBoostingClassifier un ExtraTreesClassifier, paÅ”as par sevi nodroÅ”ina pazÄ«mju svarÄ«gumu. Tas tiek aprÄÄ·inÄts, pamatojoties uz to, cik daudz katra pazÄ«me veicina piemaisÄ«jumu vai kļūdu samazinÄÅ”anos visos ansambļa kokos. PazÄ«mes ar zemu svarÄ«gumu var noÅemt.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# Get feature importances
importances = model.feature_importances_
# Sort features by importance
indices = np.argsort(importances)[::-1]
print("Feature ranking:")
for f in range(X.shape[1]):
print(f"{f + 1}. feature {indices[f]} ({cancer.feature_names[indices[f]]}) - {importances[indices[f]]:.4f}")
# Select top N features (e.g., top 10)
N = 10
selected_features_mask = np.zeros(X.shape[1], dtype=bool)
selected_features_mask[indices[:N]] = True
X_new = X[:, selected_features_mask]
print(f"Reduced shape after selecting top {N} features: {X_new.shape}")
Uz kokiem balstÄ«tas metodes ir spÄcÄ«gas, jo tÄs spÄj uztvert nelineÄras attiecÄ«bas un pazÄ«mju mijiedarbÄ«bu. TÄs ir plaÅ”i pielietojamas dažÄdÄs jomÄs, sÄkot no medicÄ«niskÄs diagnostikas (kÄ piemÄrÄ) lÄ«dz finanÅ”u krÄpÅ”anas atklÄÅ”anai dažÄdos tirgos.
PazÄ«mju izvilkÅ”ana dimensiju samazinÄÅ”anai
KamÄr pazÄ«mju atlase saglabÄ sÄkotnÄjÄs pazÄ«mes, pazÄ«mju izvilkÅ”ana rada jaunu, samazinÄtu pazÄ«mju kopu. Tas ir Ä«paÅ”i noderÄ«gi, ja sÄkotnÄjÄs pazÄ«mes ir stipri korelÄtas vai ja vÄlaties projicÄt datus zemÄkas dimensijas telpÄ, kas uztver vislielÄko dispersiju.
1. Galveno komponenŔu analīze (PCA)
PCA ir lineÄras transformÄcijas tehnika, kuras mÄrÄ·is ir atrast ortogonÄlu asu kopu (galvenÄs komponentes), kas uztver maksimÄlo dispersiju datos. PirmÄ galvenÄ komponente uztver visvairÄk dispersijas, otrÄ ā nÄkamo visvairÄk (ortogonÄli pirmajai), un tÄ tÄlÄk. SaglabÄjot tikai pirmÄs 'k' galvenÄs komponentes, mÄs panÄkam dimensiju samazinÄÅ”anu.
SvarÄ«ga piezÄ«me: PCA ir jutÄ«ga pret pazÄ«mju mÄrogu. Pirms PCA pielietoÅ”anas ir bÅ«tiski mÄrogot datus (piemÄram, izmantojot StandardScaler).
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.datasets import load_wine
wine = load_wine()
X, y = wine.data, wine.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after PCA: {X_pca.shape}")
# The explained variance ratio shows how much variance each component captures
print(f"Explained variance ratio: {pca.explained_variance_ratio_}")
print(f"Total explained variance: {np.sum(pca.explained_variance_ratio_):.4f}")
PCA ir lieliski piemÄrota augstas dimensijas datu vizualizÄÅ”anai, samazinot tos lÄ«dz 2 vai 3 dimensijÄm. TÄ ir fundamentÄla tehnika izpÄtes datu analÄ«zÄ un var ievÄrojami paÄtrinÄt turpmÄkos modelÄÅ”anas soļus. TÄs efektivitÄte ir novÄrojama dažÄdÄs jomÄs, piemÄram, attÄlu apstrÄdÄ un Ä£enÄtikÄ.
2. LineÄrÄ diskriminantu analÄ«ze (LDA)
AtŔķirÄ«bÄ no PCA, kas ir neuzraudzÄ«ta un kuras mÄrÄ·is ir maksimizÄt dispersiju, LDA ir uzraudzÄ«ta tehnika, kuras mÄrÄ·is ir atrast zemÄkas dimensijas attÄlojumu, kas maksimizÄ atdalÄmÄ«bu starp klasÄm. To galvenokÄrt izmanto klasifikÄcijas uzdevumiem.
SvarÄ«ga piezÄ«me: ArÄ« LDA prasa pazÄ«mju mÄrogoÅ”anu. TurklÄt komponenÅ”u skaits LDA ir ierobežots lÄ«dz ne vairÄk kÄ n_classes - 1.
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize LDA. Number of components cannot exceed n_classes - 1 (which is 2 for Iris)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after LDA: {X_lda.shape}")
# LDA also has explained_variance_ratio_ but it's class separability
print(f"Explained variance ratio (class separability): {lda.explained_variance_ratio_}")
LDA ir Ä«paÅ”i noderÄ«ga, ja mÄrÄ·is ir izveidot klasifikatoru, kas spÄj labi atŔķirt dažÄdas kategorijas jÅ«su datos, kas ir izplatÄ«ts izaicinÄjums daudzÄs globÄlÄs lietojumprogrammÄs, piemÄram, klientu segmentÄcijÄ vai slimÄ«bu klasifikÄcijÄ.
3. t-sadalÄ«juma stohastiskÄ kaimiÅu iegulÅ”ana (t-SNE)
t-SNE ir nelineÄra dimensiju samazinÄÅ”anas tehnika, ko galvenokÄrt izmanto augstas dimensijas datu kopu vizualizÄÅ”anai. TÄ darbojas, kartÄjot augstas dimensijas datu punktus zemas dimensijas telpÄ (parasti 2D vai 3D) tÄ, lai lÄ«dzÄ«gi punkti tiktu modelÄti ar lÄ«dzÄ«giem attÄlumiem zemas dimensijas telpÄ. TÄ lieliski atklÄj lokÄlo struktÅ«ru un klasterus datos.
SvarÄ«ga piezÄ«me: t-SNE ir skaitļoÅ”anas ziÅÄ dÄrga un parasti tiek izmantota vizualizÄcijai, nevis kÄ priekÅ”apstrÄdes solis modeļa apmÄcÄ«bai. RezultÄti var arÄ« atŔķirties atkarÄ«bÄ no dažÄdÄm nejauÅ”Äm inicializÄcijÄm un parametru iestatÄ«jumiem.
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
X, y = digits.data, digits.target
# For demonstration, we'll use a subset of the data as t-SNE can be slow
subset_indices = np.random.choice(len(X), 1000, replace=False)
X_subset = X[subset_indices]
y_subset = y[subset_indices]
# Initialize t-SNE with 2 components
# perplexity is related to the number of nearest neighbors (e.g., 30 is common)
# n_iter is the number of iterations for optimization
tsne = TSNE(n_components=2, perplexity=30, n_iter=300, random_state=42)
X_tsne = tsne.fit_transform(X_subset)
print(f"Original subset shape: {X_subset.shape}")
print(f"Reduced shape after t-SNE: {X_tsne.shape}")
# Plotting the results (optional, for visualization)
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset, cmap='viridis', alpha=0.7)
plt.title('t-SNE visualization of Digits dataset')
plt.xlabel('t-SNE component 1')
plt.ylabel('t-SNE component 2')
plt.legend(*scatter.legend_elements(), title='Classes')
plt.show()
t-SNE ir nenovÄrtÄjama, lai izprastu sarežģītu, augstas dimensijas datu, kas sastopami tÄdÄs jomÄs kÄ genomika vai sociÄlo tÄ«klu analÄ«ze, raksturÄ«go struktÅ«ru, piedÄvÄjot vizuÄlu ieskatu paraugos, kas citÄdi paliktu apslÄpti.
PareizÄs metodes izvÄle globÄlÄm datu kopÄm
AtbilstoÅ”Äs pazÄ«mju atlases vai izvilkÅ”anas metodes izvÄle nav universÄls lÄmums. Å o izvÄli ietekmÄ vairÄki faktori, kas ir Ä«paÅ”i svarÄ«gi globÄlÄm datu kopÄm:
- Datu raksturs: Vai jÅ«su dati ir skaitliski, kategoriski vai jaukta tipa? Vai ir zinÄmi sadalÄ«jumi? PiemÄram,
chi2ir piemÄrots nenegatÄ«vÄm kategoriskÄm pazÄ«mÄm, savukÄrtf_classifir paredzÄts skaitliskÄm pazÄ«mÄm un kategoriskam mÄrÄ·im. - Modeļa tips: LineÄrajiem modeļiem varÄtu bÅ«t noderÄ«ga L1 regularizÄcija, savukÄrt uz kokiem balstÄ«ti modeļi dabiski nodroÅ”ina svarÄ«guma rÄdÄ«tÄjus.
- SkaitļoÅ”anas resursi: Filtru metodes ir ÄtrÄkÄs, tÄm seko iegultÄs metodes, un pÄc tam "aptveroÅ”Äs" metodes un t-SNE.
- InterpretÄjamÄ«bas prasÄ«bas: Ja ir ļoti svarÄ«gi paskaidrot, *kÄpÄc* tiek veikta prognoze, pazÄ«mju atlases metodes, kas saglabÄ sÄkotnÄjÄs pazÄ«mes (piemÄram, RFE vai L1), bieži tiek dotas priekÅ”roka pÄr pazÄ«mju izvilkÅ”anas metodÄm (piemÄram, PCA), kas rada abstraktas komponentes.
- LinearitÄte pret nelinearitÄti: PCA un lineÄrie modeļi pieÅem lineÄras attiecÄ«bas, savukÄrt t-SNE un uz kokiem balstÄ«tas metodes spÄj uztvert nelineÄrus paraugus.
- UzraudzÄ«ta pret neuzraudzÄ«tu: LDA ir uzraudzÄ«ta (izmanto mÄrÄ·a mainÄ«go), savukÄrt PCA ir neuzraudzÄ«ta.
- MÄrogs un mÄrvienÄ«bas: PCA un LDA gadÄ«jumÄ pazÄ«mju mÄrogoÅ”ana ir bÅ«tiska. Apsveriet mÄroga atŔķirÄ«bas datos, kas savÄkti no dažÄdiem pasaules reÄ£ioniem. PiemÄram, valÅ«tas vÄrtÄ«bÄm vai sensoru rÄdÄ«jumiem var bÅ«t ļoti atŔķirÄ«gi mÄrogi dažÄdÄs valstÄ«s vai sensoru tipos.
- KultÅ«ras un reÄ£ionÄlÄs nianses: StrÄdÄjot ar datu kopÄm, kas ietver cilvÄku uzvedÄ«bu, demogrÄfiju vai noskaÅojumu no dažÄdiem kultÅ«ras kontekstiem, pazÄ«mju interpretÄcija var bÅ«t sarežģīta. PazÄ«me, kas ir ļoti prognozÄjoÅ”a vienÄ reÄ£ionÄ, var bÅ«t nenozÄ«mÄ«ga vai pat maldinoÅ”a citÄ, atŔķirÄ«gu sabiedrÄ«bas normu, ekonomisko apstÄkļu vai datu vÄkÅ”anas metodoloÄ£iju dÄļ. VienmÄr Åemiet vÄrÄ jomas ekspertu viedokli, novÄrtÄjot pazÄ«mju svarÄ«gumu dažÄdÄs populÄcijÄs.
Praktiski ieteikumi:
- SÄciet vienkÄrÅ”i: SÄciet ar filtru metodÄm (piemÄram, Variance Threshold, statistiskie testi), lai Ätri novÄrtÄtu un noÅemtu acÄ«mredzamu troksni.
- IterÄjiet un novÄrtÄjiet: EksperimentÄjiet ar dažÄdÄm metodÄm un novÄrtÄjiet to ietekmi uz jÅ«su modeļa veiktspÄju, izmantojot atbilstoÅ”us rÄdÄ«tÄjus un krustenisko validÄciju.
- VizualizÄjiet: Izmantojiet tÄdas metodes kÄ PCA vai t-SNE, lai vizualizÄtu savus datus zemÄkÄs dimensijÄs, kas var atklÄt pamatÄ esoÅ”Äs struktÅ«ras un informÄt jÅ«su pazÄ«mju atlases stratÄÄ£iju.
- Jomas zinÄÅ”anas ir galvenais: Sadarbojieties ar jomas ekspertiem, lai izprastu pazÄ«mju nozÄ«mi un atbilstÄ«bu, Ä«paÅ”i strÄdÄjot ar sarežģītiem globÄliem datiem.
- Apsveriet ansambļa pieejas: VairÄku pazÄ«mju atlases tehniku apvienoÅ”ana dažkÄrt var sniegt labÄkus rezultÄtus nekÄ paļauÅ”anÄs uz vienu metodi.
Scikit-learn konveijers (Pipeline) integrÄtai darbplÅ«smai
Scikit-learn Pipeline objekts ir Ä«paÅ”i noderÄ«gs, lai integrÄtu priekÅ”apstrÄdes soļus, ieskaitot pazÄ«mju atlasi/izvilkÅ”anu, ar modeļa apmÄcÄ«bu. Tas nodroÅ”ina, ka jÅ«su pazÄ«mju atlase tiek veikta konsekventi katrÄ krusteniskÄs validÄcijas solÄ«, novÄrÅ”ot datu noplÅ«di un sniedzot uzticamÄkus rezultÄtus. Tas ir Ä«paÅ”i svarÄ«gi, veidojot modeļus, kas tiks izvietoti dažÄdos pasaules tirgos.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_breast_cancer
bc = load_breast_cancer()
X, y = bc.data, bc.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Create a pipeline that first scales, then selects features, then trains a classifier
pipe = Pipeline([
('scaler', StandardScaler()),
('selector', SelectKBest(score_func=f_classif, k=10)),
('classifier', LogisticRegression(solver='liblinear'))
])
# Train the pipeline
pipe.fit(X_train, y_train)
# Evaluate the pipeline using cross-validation
cv_scores = cross_val_score(pipe, X_train, y_train, cv=5)
print(f"Cross-validation scores: {cv_scores}")
print(f"Average CV score: {np.mean(cv_scores):.4f}")
# Make predictions on the test set
accuracy = pipe.score(X_test, y_test)
print(f"Test set accuracy: {accuracy:.4f}")
Konveijeru izmantoÅ”ana nodroÅ”ina, ka viss process ā no mÄrogoÅ”anas lÄ«dz pazÄ«mju atlasei un klasifikÄcijai ā tiek uzskatÄ«ts par vienu vienÄ«bu. TÄ ir labÄkÄ prakse robustai modeļu izstrÄdei, Ä«paÅ”i, ja modeļi paredzÄti globÄlai izvietoÅ”anai, kur galvenais ir konsekventa veiktspÄja dažÄdos datu sadalÄ«jumos.
NoslÄgums
Dimensiju samazinÄÅ”ana, izmantojot pazÄ«mju atlasi un izvilkÅ”anu, ir bÅ«tisks solis, lai veidotu efektÄ«vus, robustus un interpretÄjamus maŔīnmÄcīŔanÄs modeļus. Scikit-learn nodroÅ”ina visaptveroÅ”u rÄ«ku komplektu Å”o problÄmu risinÄÅ”anai, sniedzot iespÄjas datu zinÄtniekiem visÄ pasaulÄ. Izprotot dažÄdÄs metodoloÄ£ijas ā filtru, "aptveroÅ”Äs", iegultÄs metodes un pazÄ«mju izvilkÅ”anas tehnikas, piemÄram, PCA un LDA ā, jÅ«s varat pieÅemt pamatotus lÄmumus, kas pielÄgoti jÅ«su konkrÄtajai datu kopai un mÄrÄ·iem.
MÅ«su globÄlajai auditorijai apsvÄrumi sniedzas tÄlÄk par algoritmisko izvÄli. Ir bÅ«tiski izprast datu izcelsmi, iespÄjamos aizspriedumus, ko rada pazÄ«mju vÄkÅ”ana dažÄdos reÄ£ionos, un vietÄjo ieinteresÄto puÅ”u Ä«paÅ”Äs interpretÄjamÄ«bas vajadzÄ«bas. TÄdu rÄ«ku kÄ Scikit-learn Pipeline izmantoÅ”ana nodroÅ”ina strukturÄtu un reproducÄjamu darbplÅ«smu, kas ir bÅ«tiska, lai izvietotu uzticamus mÄkslÄ«gÄ intelekta risinÄjumus dažÄdos starptautiskos kontekstos.
Kad jÅ«s orientÄsieties mÅ«sdienu datu zinÄtnes sarežģītÄ«bÄs, Scikit-learn pazÄ«mju atlases iespÄju apgūŔana neapÅ”aubÄmi bÅ«s nozÄ«mÄ«gs ieguvums, kas ļaus jums atraisÄ«t pilnu jÅ«su datu potenciÄlu neatkarÄ«gi no to izcelsmes.